package com.xinjian.jianba.controller;

import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;

import com.xinjian.jianba.exception.ResponseCode;
import com.xinjian.jianba.utils.JsonUtil;

@Controller
public abstract class AbstractController {

	private static final Logger LOGGER = LoggerFactory
			.getLogger(AbstractController.class);

	/**
	 * 响应客户端JSON数据
	 * 
	 * @param code
	 *            客户端响应代码
	 * @param message
	 *            客户端响应消息
	 * @return String 返回JSON字符串
	 * 
	 */
	public String responseClientJsonData(Integer code, String message) {
		return this.responseClientJsonData(code, message, null, null);
	}

	/**
	 * 响应客户端JSON数据
	 * 
	 * @param code
	 *            客户端响应代码
	 * @param message
	 *            客户端响应消息
	 * @param token
	 *            客户端响应token
	 * @return String 返回JSON字符串
	 * 
	 */
	public String responseClientJsonData(Integer code, String message,
			String token) {
		return this.responseClientJsonData(code, message, token, null);
	}

	/**
	 * 响应客户端JSON数据
	 * 
	 * @param code
	 *            客户端响应代码
	 * @param message
	 *            客户端响应消息
	 * @param obj
	 *            用于封装更多的数据对象
	 * @return String 返回JSON字符串
	 */
	public String responseClientJsonData(Integer code, String message,
			Object obj) {
		return this.responseClientJsonData(code, message, obj, null);
	}

	/**
	 * 响应客户端JSON数据
	 * 
	 * 
	 * @param code
	 *            客户端响应代码
	 * @param message
	 *            客户端响应消息
	 * @param token
	 *            客户端响应token
	 * @param result
	 *            用于封装更多的数据对象
	 * @return String 返回JSON字符串
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public String responseClientJsonData(Integer code, String message,
			Object result, String token) {
		// 初始化参数
		code = (code == null) ? ResponseCode.SUCCESS : code;
		message = (message == null) ? "SUCCESS" : message;
		token = (token == null) ? null : token;
		result = (result == null) ? new HashMap() : result;

		// 封包
		Map rt = new HashMap();
		rt.put("code", code + "");
		rt.put("message", message);
		if (token != null) {
			rt.put("token", token);
		}
		rt.put("result", result);
		String resultStr = JsonUtil.getJsonString(rt);
		LOGGER.info("-----resultStr--------" + resultStr);
		// 返回
		return resultStr;
	}

	/**
	 * 响应客户端JSON数据
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public String responseClientJsonTData(String code, String message,
			T... tDatas) {

		// 拆包
		int count = tDatas.length;
		Map result = new HashMap();
		for (T data : tDatas) {
			result.put(data.key, data.value);
		}

		// 初始化参数
		code = (code == null) ? "200" : code;
		message = (message == null) ? "SUCCESS" : message;

		// 封包
		Map rt = new HashMap();
		rt.put("code", code + "");
		rt.put("message", message);
		if (count > 0) {
			rt.put("result", result);
		}
		String resultStr = JsonUtil.getJsonString(rt);
		LOGGER.info("-----resultStr--------" + resultStr);
		// 返回
		return resultStr;
	}

	public class T<A, B> {
		public final A key;
		public final B value;

		public T(A key, B value) {
			this.key = key;
			this.value = value;
		}
	}
}
